//
//  OauthViewController.swift
//  weibo
//
//  Created by Qing on 2017/5/20.
//  Copyright © 2017年 成哥哥. All rights reserved.
//

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController {
    
    //授权Oauth页面
    private lazy var webview = UIWebView()
    
    override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .plain, target: self, action: "close")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "填充", style: .plain, target: self, action: "autoFill")
        
        webview.delegate = self
    }
    
    
    //MARK: - 登录画面相关
    override func loadView() {
        view = webview
        title = "登录微博"
        let request = URLRequest(url: NetworkTool.sharedTool.oauthURL)
        webview.loadRequest(request)
        
    }
    
    //MARK: - 监听方法
    //填充自动填写帐号密码
    @objc private func autoFill() {
    
        let js = "document.getElementById('userId').value='zxcqing@sina.cn';" + "document.getElementById('passwd').value='bfdie1qabcd';"
        webview.stringByEvaluatingJavaScript(from: js)
    
    }
    
    //关闭
    @objc fileprivate func close() {
//        self.navigationController?.popViewController(animated: true)
        //导航返回
        dismiss(animated: true, completion: nil)
        SVProgressHUD.dismiss()
    }
    
}

//MARK: - 实现webview代理
extension OAuthViewController: UIWebViewDelegate {
    
    /// 将要加载请求代理的方法
    ///
    /// - Parameters:
    ///   - webview: webview
    ///   - request: 将要加载的请求
    ///   - navigationType: navigationType. 页面跳转的方法
    /// - Returns: 返回false 不加载 ， 返回true 继续加载
    /// 如果 IOS 的代理方法中有返回Bool , 一般返回true 可正常工作， 返回false则不能正常工作。
    func webView(_ webview: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        //目标。如果是百度，则不加载页面。
        //1.判断访问的主机是否：baidu.com, 如果不是，则返回false
        guard let url = request.url, url.host == "baidu.com" else {
            
            return true
        }
        
        //2.从百度地址的url 中提取"code=" 是否在在
        guard let query = url.query, query.hasPrefix("code=") else {
//            取消授权
        print("取消授权")
            self.close()
            return false
        }
        
        //3.从query后面的字符中提取"code= 后面的授权码。
        let code = query.substring(from: "code=".endIndex)
        
//        print(url)
//        print(query)
//        print("授权码是：\(code)")
//        print("百度页面不加载")
        
//        4.加载授权码
//        NetworkTool.sharedTool.LoadAccessToKen(code: code) { (result, error) in
//            
//            //如果错误不为空，则没有返回值。
//            if error != nil {
//                print("加载授权码失败")
//                print(error)
//                return
//            }
//            
//            //数据 转 模型
//            let account = UserAccount.init(dict: result as! [String: Any])
//            
//            self.loadUserInFo(account: account)
        
         //加载 授权码
          UserAccountViewModel.sharedUserAccount.loadUserAccount(code: code) { (isSuccess) in
            
            if !isSuccess {
                
                
                print("用户信息请求失败")
                
                SVProgressHUD.show(withStatus: "您的网络不给力，请稍后再尝试")
                
                //延时1秒回到登录画面。
                delay(delayTime: 1){self.close()}

                
            } else {
            
                print("用户信息请求成功")
                print(UserAccountViewModel.sharedUserAccount.account)
                
                //切换视图通知，发送通知切前，发送通知完成后，要销毁旧的视图。
                self.dismiss(animated: true, completion: { 
                    
                    //通知中心是同步的，一旦发送通知，会先执行监听方法，再执行后续的代码。
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "WBSwiftRootViewController"), object: nil)
                })
            }
            
        }
        
        //webview代理的返回值
        return false
    }
    
    
    
//    /// 请求用户信息
//    ///
//    /// - Parameter account: 发起请求的参数，使用UserAccount类的属性，在调用时传入即可。
//    fileprivate func loadUserInFo(account: UserAccount) {
//    
//        NetworkTool.sharedTool.loadUserInFo(access_token: account.access_token!, uid: account.uid!) { (result, error) in
//            
//            if error != nil {
////
//                print("请求'用户'信息出错")
//                print(error)
//                return
//
//            }
//            
//            guard let dict = result as? [String: Any] else {
//                print("请求数据 转 字典 失败")
//                return
//            }
//            
//            //保存用户的名字和头像图片
//            account.screen_name = dict["screen_name"] as? String
//            account.avatar_large = dict["avatar_large"] as? String
//            
//            account.saveUserAccount()
//            
//            /*以下代码用来调试请求结果用： 判断result是否有值，并是否转换数组成功
//            //输出结果能够看到 具体值。
//            guard let user = result as? [String: Any] else {
//                print("result转换字典失败")
//                return
//            }
//
//            print(user["screen_name"])
//            print(user["avatar_large"])
//            */
//        }
//    
//    }
    
}
